home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / clean / sun3.lha / Sun3 / seqdemos / str_arit.icl < prev    next >
Text File  |  1992-08-07  |  1KB  |  48 lines

  1. MODULE str_arit;
  2.  
  3. <<
  4. String Arithmetic.
  5.  
  6. This program demonstrates string arithmetic by mergesorting the characters
  7. of a large string.
  8. >>
  9.  
  10. FROM deltaS IMPORT <S,+S,LENGTH,SLICE,INDEX;
  11. FROM deltaI IMPORT <=,/,--;
  12.  
  13. RULE
  14.  
  15. ==  *S is needed to create the large string. 
  16.  
  17. ::  *S INT STRING -> STRING;
  18.     *S 0 string -> "";
  19.     *S n string -> +S string (*S (-- n) string);
  20.  
  21.  
  22. ==  The mergesort algorithm on strings.
  23.  
  24. ::  MergeSort STRING -> STRING;
  25.     MergeSort str    -> str, IF <= length 1
  26.                      -> Merge (MergeSort first) (MergeSort second),
  27.                         first:  SLICE str 0 (-- middle),
  28.                         second: SLICE str middle (-- length),
  29.                         middle: / length 2,
  30.                         length: LENGTH str;
  31.  
  32. ::  Merge STRING STRING -> STRING;
  33.     Merge str  ""   -> str;
  34.     Merge ""   str  -> str;
  35.     Merge str1 str2
  36.          ->  +S ch1 (Merge (RemoveFirstChar str1) str2), IF <S ch1 ch2
  37.          ->  +S ch2 (Merge str1 (RemoveFirstChar str2)),
  38.              ch1: SLICE str1 0 0,
  39.              ch2: SLICE str2 0 0;
  40.  
  41. ::  RemoveFirstChar STRING -> STRING;
  42.     RemoveFirstChar string -> SLICE string 1 (-- (LENGTH string));
  43.  
  44. ==  The Start rule: sort a large string (30*40 characters).
  45.  
  46. ::  Start -> STRING;
  47.     Start -> MergeSort (*S 30 "Sort this garbage properly, please :-). ");
  48.